{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "097eff6b",
   "metadata": {},
   "source": [
    "# Maple Mono 使用指南\n",
    "\n",
    "当你敲下每一行代码，字体在替你表达气质与专注。Maple Mono 的目的很简单：让阅读与书写变得顺畅、统一、并拥有恰到好处的个性。\n",
    "\n",
    "## 安装与环境配置\n",
    "\n",
    "### 方式一：桌面系统安装\n",
    "\n",
    "- **Windows**  \n",
    "  解压字体文件，全部选中，右键选择“安装”或“为所有用户安装”，然后在编辑器与终端里选择字体名称。\n",
    "\n",
    "- **macOS**  \n",
    "  双击 `.ttf` / `.otf`，使用“字体册”安装，然后在 iTerm2、JetBrains、VS Code 中选择对应字体族。\n",
    "\n",
    "- **Linux**  \n",
    "  - 用户级：将字体放入 `~/.local/share/fonts` 或 `~/.fonts`，运行 `fc-cache -fv`  \n",
    "  - 系统级：放入 `/usr/local/share/fonts` 或 `/usr/share/fonts`，刷新缓存\n",
    "  \n",
    "  > 验证：运行 `fc-list | grep -i \"maple\"` 或在编辑器字体列表中搜索“Maple Mono”。\n",
    "\n",
    "### 方式二：源码安装\n",
    "\n",
    "下载源码并[安装字体](https://github.com/xinetzone/maple-font)：\n",
    "\n",
    "```bash\n",
    "git clone --recursive https://github.com/xinetzone/maple-font.git\n",
    "cd maple-font\n",
    "pip install -ve .\n",
    "```\n",
    "\n",
    "导入库后，首次使用会自动构建字体文件（约需要 2-3 分钟）：\n",
    "\n",
    "```python\n",
    "import maple_font\n",
    "# 首次导入时会显示：[maple-font] 首次使用，开始构建 Maple Mono 字体...\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d40f72a",
   "metadata": {},
   "source": [
    "## 在 Matplotlib 中设置字体\n",
    "\n",
    "使用 `set_font()` 函数可以一键设置 Matplotlib 使用 Maple Mono 字体："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4046b4be",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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L5koISUlhaFDh/Ltt98yffp0evbsecXt4+Pj2b17N//5z3949dVXL3l80qRJ9OjRg9TUVHx8fKhUqRJTp07lww8/vOI+33zzTTp16sRHH3103VOZX86uXbuIiYnhscceK7heLj09nXfeeadg/zY2NowcORIfH5/rGtooIlKaqUCJiJRC99xzD4MGDcJqtTJ79uxL1hCaN28eBw4c4L///S/PPvssAFFRUcybN48aNWpcsr8XX3yRxx9/HID777+fZs2a8eOPPzJ06NDryjVv3jyOHz/OypUr6dq1KwCPP/44devWZdGiRfTv3/8GXu21X+///vc/zp49y5YtW2jdujUAvXv3pn379vzvf/9j2LBhFz3/jjvuYObMmQB06dKFsLAwli9fzlNPPXVD+7tZX331FY8//jghISGsWbOGjh07XvX5vr6+xMXFkZiYeEmB2rVrF99++y2bNm0quCbqxRdf5OGHH2bMmDEEBwdfcb+dOnWiU6dON/+C/sro6+tLw4YNC65nOnfuHFOmTCErKwu4MFwxLCwMf39/zp07VyTHFRExmgqUiEgp1LVrV7KysjCZTHTt2vWSQrFq1SoqVarE008/XXDf3zObubu7X7K/fw4Ha9q0KZ6enledOvtKfv/9dypXrkydOnUKhozZ2dlRqVKlG9rf3671evfs2UNISEhB2QFo164dtWrVuuz02f8shu3btwe46A389e6vMM6dO1cwk+G//V1ep0yZQmZmJitWrCh4zGw207FjRxwcHC7axsPDg8TExIvuy83NZfDgwfTs2ZM2bdoU3H/vvfdSv359nn76aVauXFnoWQCBIr3eLSQkhMzMTN544w2++eYbwsPDAViwYAGbN28usuOIiBhJBUpEpBRyc3Pj3XffBbjssLiTJ0/SvHlznJycCu5LSEgAKJjI4J/+fZ+Li0vBWYLrER0dTXR0NDVr1rzksfT09Ove39+u9XpjYmLw9fW95H5fX19iYmIuuf+f1xT9Pbzsn5POXu/+CuP111/niy++uOpz7rvvvsvev3jxYnr16nXNY7zyyiscOnSI77///qL7zWYzH330EbfeeisffPABo0aNuuo+evToUfB1eno6Hh4e1zz2zahduzbffPMNubm5l/3+FBEpS1SgRERKqau9CY6Pj79kqNb+/fsBSEpKwsfH56LHkpKS8PT0BCA/P5/ExMRLngMUXHuUk5Nz2eN6enri6+vL559/fsl2HTp0uPoLuoarvV5/f38iIyMvuT86Opr69etf97GKen8AH330EW+++eZlHwsICKBz587MmzfvksfMZvNly9y/ff7557z77rt88MEHly2w7du3Z/jw4YwZM4YaNWpctpCFh4czceJEmjZtWjCFfGRkZMGkDnZ2dtjZ2RWcwbqeM1lXExoaSm5uLkeOHLnhP18RkdJCBUpEpAzy9/e/aMjcjh072LBhAwBnzpy5pBzNmjWL5557DoCVK1eSkZFx2Znu/t7u4MGD1KlT55LHO3XqxMKFC/H19S0YGgdw/vx5KlWqdPMv7AratGnD3Llz2bJlS8HQtY0bN3LixImLhuEZtT+4UD6uNCmHv78/lStXvu5JO/7pzTff5LHHHsPZ2fmSYmMymTCZTPz888/s3LmTqVOnXrZAffLJJ3h5eXH33XeTmppKtWrV+Pbbb7n99tsBeP7557G1tSUoKIiZM2deMqzwajZv3syxY8fo27cvAHFxccybN4/09PSCM15/DwHt2bMnGzZsKJHFmkVEipp+comIlEH33nsvL7zwAv369SM4OJiPPvqIl156if/85z/s3LmTpk2bXvT8qVOncuTIEfz8/Pjoo48IDAykS5cul+z3tttuw9vbm1GjRnHw4EFOnz5NXFwcCxcuxGw2079/f2bMmEG3bt0Kjr1v3z4WLFjAokWLCtaTKmoDBw7k7bffpkePHgWTTXz55ZcEBgYWXF9k5P5KwtatWwvOVN16661YrVbCwsLw8fHh+++/x2w2U7t2bcLCwi47nDI1NZXZs2czcOBAHBwccHBwwMnJiS+//JIdO3bQtGlTZs2aVTAl+RNPPFGoXOfPn+e3336jXbt2DBw4kH379vHf//6XnJwcBgwYwGOPPcaQIUOoV68e8+bNw8/Pj8OHD2NjY1N0fzgiIiVIBUpEpBQJCQm57Cx6NWrUICQkpODrUaNGcfToURYtWkR+fj5PP/00b7zxBn/++edlr+H58ssvGTFiBFFRUbRo0YKPP/4YR0fHS57n6urKggULGDFiBK+//jqenp7ce++9BY87OTmxfv16XnzxRX744QcSEhKoVq0akyZN4q677iq21+vk5MTatWsZNWoUn3zyCXCh7E2fPv2i68CqVKlSMK33PwUHB1+09lBh93czTp8+za+/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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import maple_font\n",
    "\n",
    "# 设置使用包含中文字符和 Nerd Font 图标的字体\n",
    "maple_font.set_font(font_type=\"NF-CN\")\n",
    "\n",
    "# 现在绘制的图表将使用 Maple Mono 字体显示中文和代码\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot([1, 2, 3, 4], [1, 4, 2, 3])\n",
    "plt.title(\"Maple Mono 字体测试\")\n",
    "plt.xlabel(\"X轴\")\n",
    "plt.ylabel(\"Y轴\")\n",
    "plt.text(2, 2, \"包含代码: $y = x^2$\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8087a261",
   "metadata": {},
   "source": [
    "支持的字体类型包括：\n",
    "- `\"NF-CN\"`：包含 Nerd Font 图标和中文字符的字体（推荐）\n",
    "- `\"NF\"`：包含 Nerd Font 图标但无中文字符的字体\n",
    "- `\"TTF\"`：标准 TTF 格式字体\n",
    "- `\"TTF-AutoHint\"`：经过 AutoHint 优化的 TTF 格式字体\n",
    "- `\"Variable\"`：可变字体"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8aef2a6e",
   "metadata": {},
   "source": [
    "## Glyph 管理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "043b1f67",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "找到 33617 个可用 glyph\n",
      "前10个 glyph: ['.notdef', '.notdef.1', '.null', 'A', 'A-cy', 'A.bg', 'AE', 'AEacute', 'Aacute', 'Abreve']\n",
      "Glyph 'glyph_name' 是否存在: False\n"
     ]
    }
   ],
   "source": [
    "import maple_font\n",
    "\n",
    "# 获取可用的 glyph 列表\n",
    "glyphs = maple_font.get_available_glyphs(font_type=\"NF-CN\")\n",
    "print(f\"找到 {len(glyphs)} 个可用 glyph\")\n",
    "print(f\"前10个 glyph: {glyphs[:10]}\")\n",
    "\n",
    "# 检查特定 glyph 是否存在\n",
    "glyph_exists = maple_font.check_glyph_exists(\"glyph_name\", font_type=\"NF-CN\")\n",
    "print(f\"Glyph 'glyph_name' 是否存在: {glyph_exists}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cd2b8e1d",
   "metadata": {},
   "source": [
    "## 自定义字体构建\n",
    "\n",
    "你可以构建包含特定 glyph 的自定义字体："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a8db8d72",
   "metadata": {
    "tags": [
     "hide-output"
    ]
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[maple-font-builder] 将包含自定义glyphs: ['glyph1', 'glyph2']\n",
      "[maple-font-builder] 正在调用构建脚本: /media/pc/data/lxw/ai/tasks/maple-font/build.py，参数: ['--ttf-only', '--nf', '--cn', '--least-styles', '--feat', 'glyph1,glyph2']\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "🧹 Clean cache...\n",
      "\n",
      "🚩 Start building Maple Mono Version 7.700 ...\n",
      "\n",
      "👉 Variable version for MapleMono-Italic[wght]-VF.ttf\n",
      "Rename glyph names\n",
      "Generating feature string with italic=True, cn=False, normal=False, calt=True, variable=False, infinite=True, tag=True\n",
      "Skip weight remapping since nothing changed.\n",
      "✅ Verified glyph width in MapleMono-Italic[wght]-VF.ttf\n",
      "Fix GASP table\n",
      "👉 Variable version for MapleMono[wght]-VF.ttf\n",
      "Rename glyph names\n",
      "Generating feature string with italic=False, cn=False, normal=False, calt=True, variable=False, infinite=True, tag=True\n",
      "Skip weight remapping since nothing changed.\n",
      "✅ Verified glyph width in MapleMono[wght]-VF.ttf\n",
      "Fix GASP table\n",
      "\n",
      "✨ Instatiate and optimize fonts...\n",
      "\n",
      "Check and optimize variable fonts\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/Variable/MapleMono-Italic[wght].ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_italic: True -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_oblique: False -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] italic_angle: -10.0 -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] run_rise: (3, 17) -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0083 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/Variable/MapleMono[wght].ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_italic: False -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_oblique: False -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] italic_angle: 0.0 -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] run_rise: (0, 1) -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0083 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0183 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/Variable/MapleMono-Italic[wght].ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0235 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/Variable/MapleMono[wght].ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0200 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0453 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/Variable/MapleMono-Italic[wght].ttf\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] File saved to /media/pc/data/lxw/ai/tasks/maple-font/fonts/Variable/MapleMono-Italic[wght].ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0165 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/Variable/MapleMono[wght].ttf\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] File saved to /media/pc/data/lxw/ai/tasks/maple-font/fonts/Variable/MapleMono[wght].ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0124 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0307 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "Instantiate TTF\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/Variable/MapleMono-Italic[wght].ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 1 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-ThinItalic.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 2 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-ExtraLightItalic.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 3 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-LightItalic.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 4 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-Italic.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 5 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-MediumItalic.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 6 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-SemiBoldItalic.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 7 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-BoldItalic.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 8 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-ExtraBoldItalic.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m7.7439 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/Variable/MapleMono[wght].ttf\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 1 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-Thin.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 2 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-ExtraLight.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 3 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-Light.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 4 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-Regular.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 5 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-Medium.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 6 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-SemiBold.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 7 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-Bold.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Exporting instance 8 of 8\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] Static instance saved to fonts/TTF/MapleMono-ExtraBold.ttf\n",
      "\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m7.4562 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m15.2023 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "👉 Minimal version for MapleMono-BoldItalic.ttf\n",
      "👉 Minimal version for MapleMono-Italic.ttf\n",
      "👉 Minimal version for MapleMono-Regular.ttf\n",
      "👉 Minimal version for MapleMono-Bold.ttf\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-BoldItalic.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_italic: True -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_oblique: False -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] italic_angle: -10.0 -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] run_rise: (3, 17) -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0081 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0091 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Italic.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Regular.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_italic: True -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_oblique: False -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] italic_angle: -10.0 -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] run_rise: (3, 17) -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0080 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0090 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_italic: False -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_oblique: False -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] italic_angle: 0.0 -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] run_rise: (0, 1) -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0077 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0086 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Bold.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_italic: False -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] is_oblique: False -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] italic_angle: 0.0 -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] run_rise: (0, 1) -> \u001b[32mOK\u001b[0m\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0084 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0096 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-BoldItalic.ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0252 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0262 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Bold.ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0236 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0247 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Regular.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Italic.ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0242 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0254 seconds\u001b[0m\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0257 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0268 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-BoldItalic.ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0016 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0026 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Italic.ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0016 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0026 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Bold.ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0016 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0027 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Regular.ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0017 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0029 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-BoldItalic.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Correcting contours...\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Bold.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Correcting contours...\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Regular.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Correcting contours...\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Italic.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Correcting contours...\n",
      "[ \u001b[1mINFO    \u001b[0m ] 331 glyphs were modified: \u001b[96mrupeeIndian, onesuperior, quoteleft, bar_hyphen.liga, bar_equal.mid.seq, less_numbersign_hyphen_hyphen.liga, bracketright, arrowleftfrombar, slash_equal.liga.ss11, chedescender-cy, tag_error.liga, dentistrybottomverticalright, g.cv05, quotedblleft, tag_hack.liga, exclamdown, downBlackSmallTriangle, ereversed-cy, k, rightHookArrow, Uhorn, Q.cv01, AE, equal_equal_greater.liga.cv01, Iu-cy, greater_hyphen.end.seq.cv01, ustraightstroke-cy, checkboxchecked, kaiSymbol, nArySquareIntersectionOperator, bar_hyphen.mid.seq, braceright, rightBlackSmallTriangle, dje-cy, greater_equal.end.seq.cv01, D.bg, greater_hyphen_greater.liga, Z.bg.cv10, arrowdown, Z.cv10, I.bg, union, less_equal.mid.seq, Eogonek, Dje-cy, U.bg, bitcoin, notsubset, J.bg.cv07, perthousand, exclam_equal_equal.liga, less_less_hyphen.liga.ss08, less_hyphen.end.seq, equal_less_less.liga.ss08, checkboxx, Iogonek, C.bg, leftMultimap, zhedescender-cy, lslash, E.bg, shade, tag_todo.liga, obarred-cy, alpha, Ohorn, notelement, J.bg, minus.superior, numbersign_underscore_underscore.liga, B.bg, checkbox, bar_equal_greater.liga, sharp-musical, parenright, tag_mark.liga, H.bg, Euro, O.bg, leftTwoheadedArrow, leftHalfBlackSquare, greater_equal.liga.cv64, F.bg, circle_end.bg, greater, parenright.superior, bar_equal_greater.liga.cv01, ccedilla, quotesinglbase, iu-cy, arrowdbldown, numbersign_underscore_parenleft.liga, propersuperset, equal_slash_equal.liga, notexistential, emptyset, f, greaterequal, numbersign.end.seq, KaiSymbol, dollar.cv01, won, iogonekdotless, tshe-cy, arrowleftdowntip, tag_warning.liga, sterling, W.bg, bar_hyphen.end.seq, braceleft, r.cv08, block_end.bg, less_bar_bar_bar.liga, universal, suchthat, Scedilla, S.bg, N.bg, Ereversed-cy, seven.cv09, bar_equal.end.seq, uogonek, X, numbersign_left.decorator, V.bg, uhorn, ampersand_ampersand.liga.cv65, exclam_equal.liga, logicaland, piSymbol, aogonek.cv02, greater_equal.mid.seq, ampersand_ampersand_equal.liga.cv65.ss11, tag_note.liga, X.bg, eopen, tau, dcroat, existential, numbersign_underscore.liga, numbersign_parenleft.liga, cent, Tcedilla, uniEE0A, Ustraightstroke-cy, bar_hyphen.sta.seq, greater_hyphen.mid.seq, ordfeminine.cv02, arrowrightdowntip, P.bg, e-cy, tag_warn.liga, rightTripleArrow, x, y, oslash, sharp-musical_end.bg, hyphen_less_less.liga.ss08, bar_hyphen_greater.liga, section, numbersign, hastroke-cy, iogonek.cv03, tag_info.liga, OE, Hbar, Q.bg, hyphen_hyphen_braceright_braceright.liga, arrowleft, t, downFrombarArrow, arrowleftuptip, Lslash, K.bg, franc, greater_equal.liga, equal_equal_greater.liga, bar_bar_equal.liga.ss11, T.bg, four-gujarati, hyphen_hyphen_greater.liga, zerosuperior, numbersign.mid.seq, triplearrowleft, hyphen_greater.liga.cv01, iogonekdotless.cv06, coproductarray, Obarred-cy, less_equal.sta.seq, verticalBisectingLineWhiteSquare, leftarrowoverrightarrow, partialdiff, circleddotoperator, Oogonek, one, l.cv04, ampersand_ampersand_ampersand.liga.cv65, hahook-cy, circlemultiply, numbersign.sta.seq, xcircle, Icircle, lambdastroke, ereversed-ipa, Aogonek, notcontains, tbar, tag_eror.liga, iogonek.cv06, Y.bg, Kadescender-cy, leftWhitePointer, notasersetup, asciitilde.end.seq, zero, bracketright_numbersign.liga, ampersand.cv01, hadescender-cy, exclam_asciitilde.liga.ss10, liraTurkish, a.cv02, iogonek, Tbar, braceleft_braceleft_hyphen_hyphen.liga, greater_greater_equal.liga.ss08, R.bg, less_equal.sta.seq.cv01, lowerRightQuadrantWhiteCircle, Eng, aogonek, interrobang, less_hyphen.mid.seq, circleplus, onehalf, Zhedescender-cy, Tshe-cy, leftTailArrow, eogonek, less_hyphen.sta.seq.cv01, onequarter, endescender-cy, thorn, iogonekdotless.cv03, lslash.cv04, unionarray, Endescender-cy, less_numbersign_hyphen_hyphen.liga.cv01, less_equal.end.seq, ampersand_equal.liga.cv01.ss11, Eth, quotereversed, rightarrowoverleftarrow, K, triaglf, z.cv10, a, bar_equal.liga.ss11, Hadescender-cy, arrowuprighttip, notequal, dentistrytopverticalleft, tag_fixme.liga, bar_equal.sta.seq, pagedown, ampersand_equal.liga.cv65.ss11, uniEE08, less_bar_bar.liga, less_bar.liga, greater_hyphen_greater.liga.cv01, numbersign_braceleft.liga, tag_debug.liga, oogonek, arrowdblleft, G.bg, bar_hyphen_greater.liga.cv01, Chedescender-cy, greater_equal_greater.liga.cv01, numbersign_bracketleft.liga, Q.bg.cv01, kadescender-cy, containsasmembersmall, M.bg, eng, Ghestroke-cy, A.bg, em-cy, equal_greater_greater.liga.ss08, idotless, less_equal.liga.cv01.cv63, ordfeminine, chi, Ccedilla, greater_equal.sta.seq, f.cv11, hyphen_greater.liga, greater_equal_greater.liga, tag_trace.liga, Z.bg, ghestroke-cy, equal_greater_equal.liga, hyphen_less.liga.ss08, Uogonek, upperLeftAndLowerRightBlock, greater_hyphen.end.seq, L.bg, tag_fatal.liga, tcedilla, ballotxheavy, hyphen_asciitilde.liga, literSign, scedilla, degreecelsius, threequarters, rightTabArrow, estimated, asciitilde_equal.liga.ss09, greater_hyphen.sta.seq, ohorn, equal_less_equal.liga, nAryCircledDotOperator, ii-cy, asciitilde_at.liga.cv01, braceleft_braceleft_exclam_hyphen_hyphen.liga, Oslash, naira, hyphen_hyphen_greater.liga.cv01, .notdef, hyphen, circleddivisionslash, less_equal.liga.cv63, brevecomb_hookabovecomb.case\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] 329 glyphs were modified: \u001b[96mequal_equal_greater.liga, N.bg, iogonekdotless, emptyset, Z.bg.cv10, less_equal.sta.seq, equal_less_less.liga.ss08, rightarrowoverleftarrow, r.cv08, dje-cy, Tshe-cy, greater, containsasmembersmall, oogonek, lozenge, arrowuprighttip, uogonek, numbersign_left.decorator, Chedescender-cy, lowerRightQuadrantWhiteCircle, iogonek.cv03, tag_mark.liga, eng, hastroke-cy, uniEE0A, less_hyphen.mid.seq, sharp-musical_end.bg, bar_bar_equal.liga.ss11, J.bg.cv07, braceleft_braceleft_hyphen_hyphen.liga, ereversed-ipa, mu, a, exclam_equal.liga, Hbar, Zhedescender-cy, Oogonek, numbersign_underscore_underscore.liga, C.bg, less_hyphen.end.seq, zero, hyphen_greater.liga, Oslash, bitcoin, numbersign_underscore_parenleft.liga, Ghestroke-cy, AE, hyphen_hyphen_greater.liga, greater_greater_equal.liga.ss08, perthousand, kadescender-cy, xcircle, arrowleftfrombar, endescender-cy, verticalBisectingLineWhiteSquare, checkboxx, naira, G.bg, minus.superior, L.bg, suchthat, greater_equal.liga, chi, numbersign_underscore.liga, circleplus, estimated, Hadescender-cy, bar_hyphen.liga, logicaland, equal_less_equal.liga, rightTabArrow, arrowleftuptip, ampersand_ampersand_equal.liga.cv65.ss11, D.bg, greater_hyphen.end.seq.cv01, ordfeminine.cv02, scedilla, hyphen_hyphen_greater.liga.cv01, hyphen_less.liga.ss08, braceright, braceleft, onesuperior, tag_fatal.liga, asciitilde_equal.liga.ss09, less_equal.mid.seq, liraTurkish, hyphen_asciitilde.liga, f.cv11, tag_fixme.liga, kaiSymbol, numbersign_braceleft.liga, Ustraightstroke-cy, numbersign.end.seq, less_bar_bar.liga, iogonekdotless.cv03, K, iu-cy, bar_equal.sta.seq, Aogonek, nAryCircledDotOperator, lslash, tag_info.liga, l.cv04, greater_hyphen.end.seq, Scedilla, rightHookArrow, z.cv10, leftHalfBlackSquare, Dje-cy, greater_equal.liga.cv64, OE, ustraightstroke-cy, tag_error.liga, seven.cv09, less_less_hyphen.liga.ss08, partialdiff, triaglf, asciitilde.end.seq, parenright.superior, tag_todo.liga, greater_equal.sta.seq, rupeeIndian, W.bg, hadescender-cy, aogonek, tag_hack.liga, greater_equal_greater.liga.cv01, R.bg, leftarrowoverrightarrow, Eth, I.bg, greater_hyphen.mid.seq, less_equal.liga.cv01.cv63, J.bg, greater_hyphen.sta.seq, lambdastroke, tag_warning.liga, bar_hyphen.sta.seq, bar_hyphen_greater.liga, equal_slash_equal.liga, equal_greater_equal.liga, coproductarray, numbersign.mid.seq, cent, U.bg, e-cy, Iu-cy, numbersign.sta.seq, greaterequal, Tbar, greater_equal.mid.seq, numbersign, tag_debug.liga, downFrombarArrow, eopen, Q.bg, onehalf, k, S.bg, notasersetup, iogonek.cv06, triplearrowleft, braceleft_braceleft_exclam_hyphen_hyphen.liga, obarred-cy, V.bg, downBlackSmallTriangle, exclamdown, Q.bg.cv01, checkboxchecked, ereversed-cy, bar_equal.mid.seq, t, circleddivisionslash, H.bg, quoteleft, Q.cv01, shade, bar_hyphen.mid.seq, Kadescender-cy, arrowdown, piSymbol, g.cv05, leftMultimap, M.bg, uniEE08, A.bg, circle_end.bg, a.cv02, Tcedilla, ampersand.cv01, ohorn, nArySquareIntersectionOperator, tbar, ampersand_ampersand_ampersand.liga.cv65, universal, dentistrybottomverticalright, alpha, asciitilde_at.liga.cv01, thorn, checkbox, sharp-musical, bar_hyphen.end.seq, propersuperset, X.bg, bar_equal_greater.liga.cv01, less_bar_bar_bar.liga, block_end.bg, arrowleftdowntip, x, Uogonek, tag_eror.liga, rightTripleArrow, upperLeftAndLowerRightBlock, tau, Z.bg, ampersand_equal.liga.cv01.ss11, iogonekdotless.cv06, leftTailArrow, tag_note.liga, lslash.cv04, tcedilla, KaiSymbol, T.bg, franc, notsubset, em-cy, tshe-cy, circlemultiply, bar_equal.end.seq, four-gujarati, less_bar.liga, bar_equal.liga.ss11, dentistrytopverticalleft, dollar.cv01, P.bg, notcontains, leftTwoheadedArrow, greater_equal_greater.liga, hahook-cy, zhedescender-cy, quotereversed, Endescender-cy, less_hyphen.sta.seq.cv01, tag_trace.liga, Icircle, E.bg, ccedilla, one, quotesinglbase, Ereversed-cy, eogonek, Euro, arrowleft, Eng, X, Ohorn, bracketright_numbersign.liga, slash_equal.liga.ss11, unionarray, literSign, less_equal.liga.cv63, less_equal.end.seq, idotless, circleddotoperator, hyphen_less_less.liga.ss08, numbersign_bracketleft.liga, interrobang, f, ampersand_equal.liga.cv65.ss11, O.bg, less_equal.sta.seq.cv01, onequarter, ghestroke-cy, chedescender-cy, Iogonek, equal_equal_greater.liga.cv01, greater_hyphen_greater.liga, won, exclam_equal_equal.liga, B.bg, greater_hyphen_greater.liga.cv01, Uhorn, aogonek.cv02, arrowdblleft, arrowrightdowntip, greater_equal.end.seq.cv01, quotedblleft, bracketright, ampersand_ampersand.liga.cv65, equal_greater_greater.liga.ss08, union, Obarred-cy, hyphen_hyphen_braceright_braceright.liga, hyphen_greater_greater.liga.ss08, dcroat, exclam_asciitilde.liga.ss10, hyphen, parenright, K.bg, less_numbersign_hyphen_hyphen.liga, y, .notdef, F.bg, zerosuperior, uhorn, notelement, E-cy, Ccedilla, ballotxheavy, Lslash, notequal, less_numbersign_hyphen_hyphen.liga.cv01, pagedown, leftWhitePointer, Eogonek, Z.cv10, hyphen_greater.liga.cv01, Y.bg, bar_equal_greater.liga, notexistential, arrowdbldown, tag_warn.liga, numbersign_parenleft.liga, rightBlackSmallTriangle, oslash, bar_hyphen_greater.liga.cv01, ordfeminine, existential, iogonek\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] 366 glyphs were modified: \u001b[96mshade, V.bg, T.bg, greater_equal.liga, numbersign_underscore_underscore.liga, cent, zhedescender-cy, numbersign.end.seq, iogonekdotless.cv39, gbreve.cv38, f_f.liga, lambdastroke, P.bg, notexistential, ohorn, bar_equal.liga.ss11, xcircle, Q.bg.cv01, oslash, arrowdbldown, quotesinglbase, E-cy, dje-cy, y.cv37, l_l.liga, ccedilla, obarred-cy, circleplus, sharp-musical, numbersign_braceleft.liga, bracketright, ampersand.cv01, less_equal.liga.cv63, Uogonek, F.bg, coproductarray, less_hyphen.mid.seq, zerosuperior, e, bar_equal_greater.liga.cv01, less_hyphen.end.seq, rupeeIndian, gcircumflex.cv38, greater_equal.end.seq.cv01, ydotbelow, parenleft.superior, K.bg, W.bg, idotless.cv33, tag_fatal.liga, U.bg, alpha, exclam_equal.liga, greater_hyphen.mid.seq, Ohorn, N.bg, notequal, l, g.cv38, tag_trace.liga, kaiSymbol, circlemultiply, arrowdown, leftTwoheadedArrow, hadescender-cy, O.bg, Endescender-cy, tag_error.liga, Euro, dentistrytopverticalleft, n.superior, tag_mark.liga, f, less_equal.sta.seq, z.cv43, onequarter, x.cv36, hyphen_greater_greater.liga.ss08, Eth, tag_info.liga, uogonek, f.cv32, greater_hyphen.sta.seq, ustraightstroke-cy, numbersign.mid.seq, Ghestroke-cy, downFrombarArrow, iogonekdotless, less_hyphen.sta.seq.cv01, hastroke-cy.cv36, x_l.liga, piSymbol, E.bg, tag_warn.liga, iogonek, literSign, tshe-cy, numbersign, ampersand_equal.liga.cv65.ss11, Chedescender-cy, tcedilla, hyphen_hyphen_greater.liga.cv01, uhorn, lslash, exclamdown, numbersign.sta.seq, less_bar.liga, liraTurkish, dentistrybottomverticalright, chi, Iu-cy, leftHookArrow, leftMultimap, eogonek, universal, hahook-cy, arrowdblleft, less_equal_greater.liga, greater_equal.sta.seq, tag_hack.liga, less_bar_bar_bar.liga, I.bg, asciitilde_greater.liga, zero, nAryCircledDotOperator, checkboxchecked, numbersign_left.decorator, Ustraightstroke-cy, Iogonek, greater_equal_greater.liga.cv01, equal_equal_greater.liga, less_equal_equal_greater.liga, oogonek, Ccedilla, aogonek, bar_equal.mid.seq, Oslash, threequarters, block_end.bg, sevensuperior.cv42, tbar, circleddivisionslash, tau, asciitilde.end.seq, notasersetup, i_l_l.liga, leftHalfBlackSquare, pagedown, suchthat, emptyset, greater, iogonek.cv33, bar_hyphen_greater.liga, Z.cv43, endescender-cy, u_l.liga, unionarray, hyphen_hyphen_braceright_braceright.liga, equal_greater_greater.liga.ss08, hadescender-cy.cv36, bar_equal.end.seq, hastroke-cy, e-cy, a_l.liga, existential, K, x, gacute.cv38, J.bg.cv40, S.bg, tag_note.liga, numbersign_underscore.liga, chedescender-cy, Obarred-cy, downBlackSmallTriangle, leftWhitePointer, kadescender-cy, sterling, triplearrowleft, C_l.liga, tag_todo.liga, notelement, e_l.liga, bar_bar_equal.liga.ss11, yen, L.bg, hyphen_greater.liga, arrowleftfrombar, won, numbersign_underscore_parenleft.liga, Z.bg, iogonekdotless.cv33, tag_fixme.liga, hookabovecomb.case, gdotaccent.cv38, ampersand_ampersand.liga.cv65, questiondown, A.bg, k, less_numbersign_hyphen_hyphen.liga, braceleft_braceleft_hyphen_hyphen.liga, ampersand_ampersand_equal.liga.cv65.ss11, one, t_l.liga, greater_greater_equal.liga.ss08, Hbar, eng, dcroat, Scedilla, mu, .notdef, R.bg, bar_hyphen.sta.seq, eopen, circumflexcomb_hookabovecomb.case, rightTripleArrow, partialdiff, equal_less_equal.liga, em-cy, Q.bg, f.cv44, Aogonek, bracketright_numbersign.liga, logicaland, B.bg, exclam_equal_equal.liga, ghestroke-cy, quoteleft, Uhorn, asciitilde_at.liga.cv01, X.bg, equal_slash_equal.liga, c_l.liga, bar_hyphen.mid.seq, less_equal.mid.seq, ordfeminine, iogonek.cv39, KaiSymbol, rightWaveArrow, l.cv04, section, a_l_l.liga, verticalBisectingLineWhiteSquare, bar_equal_greater.liga, Icircle, Eng, X, less_less_hyphen.liga.ss08, quotedblleft, hyphen_asciitilde.liga, brevecomb_hookabovecomb.case, ballotxheavy, t_t.liga, numbersign_bracketleft.liga, AE, rightBlackSmallTriangle, Oogonek, ampersand_ampersand_ampersand.liga.cv65, a.cv31, gcaron.cv38, Tbar, C.bg, notsubset, u_l_l.liga, Eogonek, Q.cv01, containsasmembersmall, bar_hyphen_greater.liga.cv01, naira, Hadescender-cy, leftarrowoverrightarrow, J.bg, t, upperLeftAndLowerRightBlock, Dje-cy, greater_hyphen.end.seq, less_numbersign_hyphen_hyphen.liga.cv01, ampersand_equal.liga.cv01.ss11, braceright, Zhedescender-cy, less_equal.end.seq, tag_warning.liga, arrowlefttobar, exclam_asciitilde.liga.ss10, i_l.liga, sharp-musical_end.bg, checkbox, interrobang, greater_equal.mid.seq, seven.cv42, r.cv41, rightarrowoverleftarrow, hahook-cy.cv36, four-gujarati, k.cv34, OE, propersuperset, greater_equal.liga.cv64, less_equal.sta.seq.cv01, estimated, ereversed-ipa, Tshe-cy, aogonek.cv31, onesuperior, equal_greater_equal.liga, onehalf, dollar.cv01, hyphen_greater.liga.cv01, bar_hyphen.liga, uniEE08, less_bar_bar.liga, Z.bg.cv43, slash_equal.liga.ss11, checkboxx, H.bg, M.bg, iu-cy, lowerRightQuadrantWhiteCircle, leftTailArrow, union, schwa-cy, greater_hyphen_greater.liga, gcommaaccent.cv38, ordfeminine.cv31, tag_debug.liga, circleddotoperator, bitcoin, braceleft, D.bg, ereversed-cy, greaterequal, braceleft_braceleft_exclam_hyphen_hyphen.liga, greater_hyphen_greater.liga.cv01, a, greater_equal_greater.liga, Y.bg, nArySquareIntersectionOperator, tag_eror.liga, notcontains, franc, hyphen_hyphen_greater.liga, greater_hyphen.end.seq.cv01, bar_equal.sta.seq, f_f.liga.cv32, arrowleft, parenright, hookabovecomb, lslash.cv04, G.bg, numbersign_parenleft.liga, bar_hyphen.end.seq, Tcedilla, schwa, Lslash, asciitilde_equal.liga.ss09, arrowuprighttip, circle_end.bg, triaglf, perthousand, equal_equal_greater.liga.cv01, Kadescender-cy, e_l_l.liga, rightHookArrow, uniEE0A, scedilla, quotereversed\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] 358 glyphs were modified: \u001b[96mless_less_hyphen.liga.ss08, downFrombarArrow, equal_equal_greater.liga.cv01, greater_equal.liga.cv64, tbar, W.bg, tag_fatal.liga, tag_debug.liga, tau, hadescender-cy.cv36, rightWaveArrow, bar_hyphen_greater.liga.cv01, X.bg, bar_equal_greater.liga.cv01, notexistential, xcircle, hastroke-cy, schwa, u_l.liga, sharp-musical, sevensuperior.cv42, alpha, Iu-cy, hyphen_greater.liga, equal_greater_equal.liga, x_l.liga, equal_slash_equal.liga, e_l_l.liga, f_f.liga, tshe-cy, braceleft_braceleft_exclam_hyphen_hyphen.liga, U.bg, uniEE0A, kaiSymbol, ballotxheavy, rupeeIndian, tag_warning.liga, greater_hyphen.mid.seq, numbersign_left.decorator, block_end.bg, iogonekdotless.cv33, braceleft_braceleft_hyphen_hyphen.liga, bracketright_numbersign.liga, numbersign_underscore.liga, checkboxx, Z.bg.cv43, idotless.cv33, notelement, bracketright, leftHalfBlackSquare, hahook-cy.cv36, less_equal.liga.cv63, notasersetup, bar_bar_equal.liga.ss11, J.bg.cv40, sharp-musical_end.bg, leftTailArrow, greater_equal.mid.seq, tag_warn.liga, dentistrybottomverticalright, exclam_equal_equal.liga, scedilla, dentistrytopverticalleft, f, uhorn, hastroke-cy.cv36, numbersign_bracketleft.liga, tag_mark.liga, less_bar_bar.liga, leftarrowoverrightarrow, M.bg, KaiSymbol, less_hyphen.end.seq, ohorn, Dje-cy, less_equal.sta.seq.cv01, gbreve.cv38, circleddivisionslash, I.bg, less_hyphen.mid.seq, hookabovecomb.case, asciitilde_at.liga.cv01, f.cv32, J.bg, P.bg, Tshe-cy, piSymbol, quotereversed, numbersign.end.seq, leftHookArrow, cent, obarred-cy, a, uniEE08, logicaland, Kadescender-cy, arrowlefttobar, zerosuperior, less_bar_bar_bar.liga, greater_greater_equal.liga.ss08, liraTurkish, less_equal.end.seq, Scedilla, partialdiff, numbersign_braceleft.liga, less_numbersign_hyphen_hyphen.liga, chedescender-cy, circleplus, .notdef, n.superior, S.bg, circlemultiply, r.cv41, tag_info.liga, x.cv36, ampersand_ampersand.liga.cv65, numbersign, em-cy, seven.cv42, tag_eror.liga, k.cv34, eogonek, iogonek.cv33, asciitilde.end.seq, i_l_l.liga, braceleft, Oogonek, ccedilla, ereversed-cy, Q.cv01, t_l.liga, K.bg, c_l.liga, u_l_l.liga, circumflexcomb_hookabovecomb.case, hyphen_hyphen_braceright_braceright.liga, quotesinglbase, greater_equal.sta.seq, ampersand.cv01, a.cv31, one, greater, checkbox, rightBlackSmallTriangle, parenright, leftWhitePointer, equal_equal_greater.liga, won, zhedescender-cy, Ohorn, t_t.liga, K, X, emptyset, exclam_equal.liga, endescender-cy, Tcedilla, bar_equal.mid.seq, gcaron.cv38, triplearrowleft, checkboxchecked, tag_trace.liga, Zhedescender-cy, Eng, Oslash, dollar.cv01, E.bg, tag_todo.liga, arrowleftfrombar, gcommaaccent.cv38, suchthat, A.bg, perthousand, numbersign.mid.seq, exclam_asciitilde.liga.ss10, literSign, C_l.liga, lslash.cv04, a_l.liga, lslash, a_l_l.liga, numbersign_parenleft.liga, four-gujarati, onehalf, less_equal.sta.seq, kadescender-cy, iogonek.cv39, eng, bar_equal.sta.seq, shade, lowerRightQuadrantWhiteCircle, existential, onequarter, bar_hyphen.end.seq, ampersand_ampersand_equal.liga.cv65.ss11, ustraightstroke-cy, greater_equal_greater.liga.cv01, unionarray, Endescender-cy, z.cv43, numbersign.sta.seq, upperLeftAndLowerRightBlock, lozenge, hadescender-cy, ordfeminine, franc, Z.cv43, tcedilla, ordfeminine.cv31, F.bg, hyphen_greater_greater.liga.ss08, Q.bg, less_bar.liga, iu-cy, nArySquareIntersectionOperator, N.bg, onesuperior, lambdastroke, g.cv38, hyphen_hyphen_greater.liga.cv01, Lslash, G.bg, union, Q.bg.cv01, bar_hyphen.sta.seq, D.bg, Uhorn, T.bg, quotedblleft, hyphen_asciitilde.liga, equal_less_equal.liga, Uogonek, naira, eopen, quoteleft, numbersign_underscore_underscore.liga, l.cv04, y.cv37, tag_error.liga, greater_equal_greater.liga, Ustraightstroke-cy, Eth, less_numbersign_hyphen_hyphen.liga.cv01, H.bg, Euro, f_f.liga.cv32, gdotaccent.cv38, Eogonek, O.bg, aogonek, V.bg, bar_equal.end.seq, oogonek, coproductarray, notequal, arrowleft, hyphen_greater.liga.cv01, circle_end.bg, greater_hyphen.sta.seq, bar_hyphen_greater.liga, Ccedilla, Hbar, iogonekdotless, k, Y.bg, hookabovecomb, uogonek, iogonekdotless.cv39, leftTwoheadedArrow, verticalBisectingLineWhiteSquare, l_l.liga, mu, exclamdown, rightarrowoverleftarrow, Ii-cy, rightTripleArrow, L.bg, braceright, greater_equal.liga, interrobang, less_equal.mid.seq, greater_hyphen_greater.liga, dje-cy, asciitilde_equal.liga.ss09, gcircumflex.cv38, arrowdblleft, nAryCircledDotOperator, radical, greater_hyphen.end.seq, E-cy, bar_equal.liga.ss11, chi, Obarred-cy, tag_fixme.liga, brevecomb_hookabovecomb.case, Hadescender-cy, tag_note.liga, bitcoin, universal, iogonek, bar_hyphen.mid.seq, ampersand_ampersand_ampersand.liga.cv65, arrowdbldown, estimated, bar_hyphen.liga, propersuperset, greater_hyphen_greater.liga.cv01, rightHookArrow, bar_equal_greater.liga, Ghestroke-cy, equal_greater_greater.liga.ss08, pagedown, numbersign_underscore_parenleft.liga, greater_hyphen.end.seq.cv01, tag_hack.liga, containsasmembersmall, l, Z.bg, i_l.liga, e-cy, arrowdown, Chedescender-cy, AE, circleddotoperator, t, C.bg, arrowuprighttip, R.bg, less_hyphen.sta.seq.cv01, hahook-cy, slash_equal.liga.ss11, dcroat, notcontains, x, greater_equal.end.seq.cv01, gacute.cv38, ii-cy, oslash, B.bg, f.cv44, hyphen_hyphen_greater.liga, Aogonek, Icircle, zero, triaglf, ampersand_equal.liga.cv01.ss11, OE, ereversed-ipa, downBlackSmallTriangle, leftMultimap, aogonek.cv31, Tbar, notsubset, greaterequal, ampersand_equal.liga.cv65.ss11, e_l.liga, Iogonek, ghestroke-cy\u001b[0m\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] File saved to /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Bold.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.6432 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.6443 seconds\u001b[0m\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] File saved to /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Regular.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.6571 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.6582 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] File saved to /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-BoldItalic.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.7411 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.7423 seconds\u001b[0m\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] File saved to /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Italic.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.7203 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.7214 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-BoldItalic.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Bold.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Regular.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Italic.ttf\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] File saved to /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Bold.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.2387 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.2397 seconds\u001b[0m\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] File saved to /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-BoldItalic.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.2631 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.2643 seconds\u001b[0m\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] File saved to /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Regular.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.2406 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.2416 seconds\u001b[0m\n",
      "[ \u001b[32m\u001b[1mSUCCESS \u001b[0m ] File saved to /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Italic.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.2646 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.2657 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Bold.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-BoldItalic.ttf\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Regular.ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0989 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.1007 seconds\u001b[0m\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.0986 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.0997 seconds\u001b[0m\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.1065 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.1080 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[ \u001b[1mINFO    \u001b[0m ] Processing file /media/pc/data/lxw/ai/tasks/maple-font/fonts/TTF/MapleMono-Italic.ttf\n",
      "[ \u001b[90m\u001b[1mSKIP    \u001b[0m ] No changes made\n",
      "[ \u001b[1mINFO    \u001b[0m ] Processing time: \u001b[36m0.1107 seconds\u001b[0m\n",
      "[ \u001b[1mINFO    \u001b[0m ] Elapsed time \u001b[36m0.1119 seconds\u001b[0m\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Generating feature string with italic=False, cn=False, normal=False, calt=True, variable=False, infinite=True, tag=True\n",
      "Generating feature string with italic=False, cn=False, normal=False, calt=True, variable=False, infinite=True, tag=True\n",
      "Generating feature string with italic=True, cn=False, normal=False, calt=True, variable=False, infinite=True, tag=True\n",
      "Generating feature string with italic=True, cn=False, normal=False, calt=True, variable=False, infinite=True, tag=True\n",
      "✅ Verified glyph width in MapleMono-Bold\n",
      "✅ Verified glyph width in MapleMono-Regular\n",
      "✅ Verified glyph width in MapleMono-BoldItalic\n",
      "✅ Verified glyph width in MapleMono-Italic\n",
      "👉 Auto hint MapleMono-Bold.ttf\n",
      "👉 Auto hint MapleMono-Regular.ttf\n",
      "👉 Auto hint MapleMono-Italic.ttf\n",
      "👉 Auto hint MapleMono-BoldItalic.ttf\n",
      "Generating feature string with italic=False, cn=False, normal=False, calt=True, variable=False, infinite=False, tag=True\n",
      "Generating feature string with italic=False, cn=False, normal=False, calt=True, variable=False, infinite=False, tag=True\n",
      "Generating feature string with italic=True, cn=False, normal=False, calt=True, variable=False, infinite=False, tag=True\n",
      "Generating feature string with italic=True, cn=False, normal=False, calt=True, variable=False, infinite=False, tag=True\n",
      "\n",
      "🔧 Patch Nerd-Font v3.4.0 using prebuild base font...\n",
      "\n",
      "👉 NerdFont version for MapleMono-Regular.ttf\n",
      "👉 NerdFont version for MapleMono-Bold.ttf\n",
      "👉 NerdFont version for MapleMono-Italic.ttf\n",
      "👉 NerdFont version for MapleMono-BoldItalic.ttf\n",
      "✅ Verified glyph width in MapleMono-NF-BoldItalic\n",
      "✅ Verified glyph width in MapleMono-NF-Regular\n",
      "✅ Verified glyph width in MapleMono-NF-Bold\n",
      "✅ Verified glyph width in MapleMono-NF-Italic\n",
      "\n",
      "Checking CN static font directory source/cn/static\n",
      "✅ Hash verified\n",
      "\n",
      "🔎 Build CN fonts with Nerd-Font...\n",
      "\n",
      "👉 NF-CN version for MapleMono-NF-BoldItalic.ttf\n",
      "👉 NF-CN version for MapleMono-NF-Bold.ttf\n",
      "👉 NF-CN version for MapleMono-NF-Regular.ttf\n",
      "👉 NF-CN version for MapleMono-NF-Italic.ttf\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Dropped cmap subtable from font '0':\tformat  6, platformID  1, platEncID  0\n",
      "Dropped cmap subtable from font '0':\tformat  6, platformID  1, platEncID  0\n",
      "Dropped cmap subtable from font '1':\tformat  6, platformID  1, platEncID  0\n",
      "Dropped cmap subtable from font '1':\tformat  6, platformID  1, platEncID  0\n",
      "Dropped cmap subtable from font '0':\tformat  6, platformID  1, platEncID  0\n",
      "Dropped cmap subtable from font '1':\tformat  6, platformID  1, platEncID  0\n",
      "Dropped cmap subtable from font '0':\tformat  6, platformID  1, platEncID  0\n",
      "Dropped cmap subtable from font '1':\tformat  6, platformID  1, platEncID  0\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Generating feature string with italic=True, cn=True, normal=False, calt=True, variable=False, infinite=True, tag=True\n",
      "Generating feature string with italic=False, cn=True, normal=False, calt=True, variable=False, infinite=True, tag=True\n",
      "Generating feature string with italic=True, cn=True, normal=False, calt=True, variable=False, infinite=True, tag=True\n",
      "Generating feature string with italic=False, cn=True, normal=False, calt=True, variable=False, infinite=True, tag=True\n",
      "Scale CN / JP glyph to (1.05x, 1.05x)\n",
      "Scale CN / JP glyph to (1.05x, 1.05x)\n",
      "Scale CN / JP glyph to (1.05x, 1.05x)\n",
      "Scale CN / JP glyph to (1.05x, 1.05x)\n",
      "✅ Verified glyph width in MapleMono-NF-CN-Bold\n",
      "✅ Verified glyph width in MapleMono-NF-CN-Regular\n",
      "✅ Verified glyph width in MapleMono-NF-CN-Italic\n",
      "✅ Verified glyph width in MapleMono-NF-CN-BoldItalic\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[maple-font-builder] 正在清理目标目录: /media/pc/data/lxw/ai/tasks/maple-font/src/maple_font/data/fonts\n",
      "[maple-font-builder] 正在将字体文件从 /media/pc/data/lxw/ai/tasks/maple-font/fonts 复制到 /media/pc/data/lxw/ai/tasks/maple-font/src/maple_font/data/fonts\n",
      "[maple-font-builder] 已复制: Variable\n",
      "[maple-font-builder] 已复制: TTF\n",
      "[maple-font-builder] 已复制: TTF-AutoHint\n",
      "[maple-font-builder] 已复制: NF\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "🏁 Build finished at 17:37:46, cost 70.50 s, family name is Maple Mono, +calt;\n",
      "   See your fonts in /media/pc/data/lxw/ai/tasks/maple-font/fonts\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[maple-font-builder] 已复制: NF-CN\n",
      "[maple-font-builder] 已复制: build-config.json\n",
      "[maple-font-builder] 字体文件复制成功，共复制 6 个文件，失败 0 个\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "自定义字体构建成功\n"
     ]
    }
   ],
   "source": [
    "import maple_font\n",
    "\n",
    "# 构建包含自定义 glyph 的字体\n",
    "success = maple_font.build_with_custom_glyphs(\n",
    "    glyphs=[\"glyph1\", \"glyph2\"],  # 替换为你需要的 glyph 名称\n",
    "    force_rebuild=True,  # 强制重新构建\n",
    "    verbose=True  # 显示详细信息\n",
    ")\n",
    "\n",
    "if success:\n",
    "    print(\"自定义字体构建成功\")\n",
    "else:\n",
    "    print(\"自定义字体构建失败\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "10acd1ea",
   "metadata": {},
   "source": [
    "## VSCode\n",
    "**VS Code (`settings.json`)**\n",
    "```json\n",
    "{\n",
    "  // \"editor.fontFamily\": \"'Maple Mono','Maple Mono NF','Maple Mono CN',monospace\", 或者\n",
    "  \"editor.fontFamily\": \"Maple Mono NF CN, Menlo, Consolas, Maple UI, PingFang, 'Microsoft YaHei', monospace\",\n",
    "  // \"editor.fontLigatures\": true, 或者\n",
    "  \"editor.fontLigatures\": \"'calt', 'cv01', 'ss01', 'zero'\",\n",
    "  \"editor.lineHeight\": 1.6,\n",
    "  \"terminal.integrated.fontFamily\": \"Maple Mono NF\",\n",
    "  \"editor.fontSize\": 14\n",
    "}\n",
    "```\n",
    "也可以考虑直接使用 [Maple Mono 插件](https://marketplace.visualstudio.com/items?itemName=subframe7536.custom-ui-style)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09fd4217",
   "metadata": {},
   "source": [
    "## Web 集成\n",
    "\n",
    "### 基本引入\n",
    "\n",
    "```css\n",
    "@font-face {\n",
    "  font-family: 'MapleMono';\n",
    "  src: url('/fonts/MapleMono-Regular.woff2') format('woff2'),\n",
    "       url('/fonts/MapleMono-Regular.ttf') format('truetype');\n",
    "  font-weight: 400;\n",
    "  font-style: normal;\n",
    "  font-display: swap;\n",
    "}\n",
    "code, pre, kbd, samp {\n",
    "  font-family: 'MapleMono', 'Maple Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n",
    "}\n",
    "```\n",
    "\n",
    "### 可变字体与特性\n",
    "\n",
    "```css\n",
    "code {\n",
    "  font-variation-settings: 'wght' 450, 'slnt' 0;\n",
    "  font-feature-settings: \"calt\" 1, \"liga\" 1, \"ss06\" 1, \"ss07\" 1, \"zero\" 1;\n",
    "}\n",
    "```\n",
    "\n",
    "## 特性与进阶\n",
    "\n",
    "### 连字与样式控制\n",
    "\n",
    "- 开启连字（编辑器/浏览器）：\n",
    "  - VS Code: `\"editor.fontLigatures\": true`\n",
    "  - CSS: `font-feature-settings: \"liga\" 1, \"calt\" 1;`\n",
    "\n",
    "- 关闭连字：\n",
    "  - VS Code: `\"editor.fontLigatures\": false`\n",
    "  - CSS: `font-feature-settings: \"liga\" 0, \"calt\" 0;`\n",
    "\n",
    "- 常见可读性增强：\n",
    "  - `\"zero\" 1`：零与欧（`0`/`O`）区分\n",
    "  - `\"ss0x\"` / `\"cv0x\"`：按样式集或自定义变体切换字形\n",
    "\n",
    "### 中文与混排建议\n",
    "\n",
    "- 英中文对齐：以等宽代码环境为主，正文避免强制等宽\n",
    "- 行高建议：代码块 `line-height` 1.6–1.8\n",
    "- 标点与表格：必要时关闭连字或调整字距\n",
    "- “CN” 变体：减少 fallback 抖动\n",
    "\n",
    "### Maple Mono 与 Sphinx 集成\n",
    "\n",
    "```css\n",
    ":root {\n",
    "  --code-font-stack: 'Maple Mono','Maple Mono CN','Maple Mono NF',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;\n",
    "}\n",
    "code, pre, .highlight code, .highlight pre {\n",
    "  font-family: var(--code-font-stack);\n",
    "  font-feature-settings: \"calt\" 1, \"liga\" 1, \"zero\" 1;\n",
    "  line-height: 1.7;\n",
    "}\n",
    "```"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py313",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
